March 18, 2021
์ผ๋จ ํ๋ก ํธ์๋ ๊ด์ ์์ ๋ฐ๋ผ๋ณธ ์ฐ๋ฆฌ๊ฐ ๋ง๋ค๊ณ ์ ํ๋ ์น ์๋น์ค๋ฅผ ์๋ ์ถ์ผ๋ก ๋๋ ๋ณด์๋ค.
์ฒซ ๋ฒ์งธ ์ถ์, ๋ฉ์ธ ๋๋ฉํ์ด์ง๋ฅผ ์ฃผ์ถ์ผ๋ก ํ ๋ก๊ทธ์ธ, ๋ง์ดํ์ด์ง ๋ถ๋ถ๊ณผ
๋ ๋ฒ์งธ ์ถ์, ํ์๊ฐ์ ํ์ด์ง์ ์๋น์ค์ ์ค์ ๊ธฐ๋ฅ์ ์ ๋ณด์ด๋ ์ค์ผ์ค๋ฌ ํ์ด์ง์ ๋ฉ์ธํ๋ฉด์์ ๊ฒ์์ ํ์ ๋ ์ด๋ํ๋ ์์น ํ์ด์ง๊ฐ ๊ทธ๊ฒ์ด์๋ค.
๊ฐ์ด ํ๋ก ํธ์๋๋ฅผ ๋ด๋นํ๋ ๋ถ์๊ฒ ๋จผ์ ์ ํ๊ถ์ ๋๋ฆฌ๊ณ ๋ณด๋ ๋๋ ์ฒซ ๋ฒ์งธ ์ถ์ ๋ด๋นํ์๊ณ ํ์๊ฐ์ ํ์ด์ง ๋ถ๋ถ์ ์งํํ๋ค ๋ณด๋ ํตํฉ์ด ์ด๋ฃจ์ด์ ธ ์์ฐ์ค๋ ๋ด๊ฐ ๋งก์ ํ๋ฒ์ ์งํํ๊ฒ ๋์๋ค.
์ถํ ๋ฆฌํฉํ ๋ง ์ ํ์๋ค๊ณผ ์ด์ผ๊ธฐ๋ฅผ ๋๋์ด ํฐํธ์ ํฌ๊ธฐ๋ ์ข ๋ฅ ๋ฑ ๋๋ฌด ํ ์ด? ์ค๋ฌ์ด ๋ฏํ ์น ์๋น์ค์ ์ด๋ฏธ์ง๋ฅผ ์ด์ง ๋ฌ๋ฆฌ ํด ๋ณด๋ ์๋๋ฅผ ํ๋ ค๊ณ ํ๋ค.
์ฌ์ฉ์ ์ ์ฅ์์ ์ ์ผ ๋จผ์ ๋ณด๊ฒ ๋๋ ์ผ๊ตด์ด ๋ ํ์ด์ง๋ผ ์ ๋ง ์ ๋ง๋ค์ด์ผ ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
์ฒ์์ ๋ถ๋ช ์ด๋ ค์ ์ง๋ง ๊ณ์ ์๋ํ๊ณ ์ ์ฉํด๋ณด๋ ์ง๊ธ ์๊ฐ์ผ๋ก๋ ๋ฉ์ธ ๋๋ฉํ์ด์ง CSS ์์ ์ด ์ ๋ง ์ฌ๋ฐ๊ณ ๋ฟ๋ฏํจ์ ๋๊ผ๋ ํํธ์๋ค.
์ฌ๊ธฐ์ ๋ฉ์ถ์ง ์๊ณ ํธํฐ ๋ถ๋ถ๋ ๋ง๋ค์ด ๋ณด์๊ณ ,
ํ ๋ฐ ๋ ๋์๊ฐ ํ๋ธ๋ฆฟ๊ณผ ๋ชจ๋ฐ์ผ๋ก์ 3๋จ ๋ณ์ ์ด ๊ฐ๋ฅํ๋๋ก ๋ฐ์ํ ์น์ ์ ์ฉํ๊ธฐ๋ ํ๋ค.
๋ฌด์๋ณด๋ค๋ gif ์์์์๋ ํ์ธํ ์ ์๋ฏ์ด ํค๋ ๋ถ๋ถ์ ์คํฌ๋กค ํ ์ ํค๋ ๋์์ธ๊ณผ ๋ฒํผ์ด ๋ฐ๋๋ฉฐ ๊ณ ์ ๋๋๋ก ๋ง๋ค์๋ ๊ฒ๋ ๋ฟ๋ฏํจ์ด ๋จ์๋ค.
ํ์ง๋ง ์ด ์คํฌ๋กค ์ด๋ฒคํธ๋ ์ฒ์์ DOM ์์๋ฅผ ์ ํํด์ ์ด๋ฒคํธ๊ฐ ์คํ๋๋ ์ฝ๋๋ฅผ ์งฐ์๋๋ฐ, ๋ฆฌ์กํธ์์๋ ์ํ ์์๋ฅผ ์ง์ ์ ์ผ๋ก ์์ ํ๋ฉด ์๋๋ฏ๋ก
useRef() ๋ผ๋ ์์ฑ์ ์ฌ์ฉํด์ ์ด๋ฒคํธ๋ฅผ ๊ฑธ์ด ์ฃผ์ด์ผ ํ๋ค.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๊ฐํ์ ์ธ ์๋ฌ๊ฐ ๋์ ๋ฌด์จ ๋ฌธ์ ์ผ๊น ์ถ๋ค๊ฐ,
useRef ๋ก ์์ฑ๋ ๊ฐ์ฒด ๋ด์๋ current ๋ผ๋๊ฒ ๋ค์ด๊ฐ ์๊ณ ,
headerRef.current.classList.toggle('sticky', window.scrollY > 0);
์ด๋ผ๋ ์ฝ๋๋ฅผ ํตํด ์คํฌ๋กค y์ถ์ด 0๋ณด๋ค ์ปค์ง ๋ (์คํฌ๋กค์ด ๋ ๋) sticky ๋ผ๋ ํด๋์ค๊ฐ ๋ถ์ฌ๊ฐ ๋๋ฉด์ ํด๋น CSS ๊ฐ ์ ์ฉ์ด ๋๊ฒ ํ๋ ๊ฒ์ด๋ค.
๋ฐ๋ก ์ด current์ ๊ฐ์ด null ์ผ ๊ฒฝ์ฐ์ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ง ์์ ๊ฐํ์ ์ธ ์๋ฌ๊ฐ ๋ฌ๋ ๊ฒ์ด๋ค.
์ฝ๋๋ฅผ ์์ ํ๋ ๋ ์ด์ ์๋ฌ๊ฐ ๋์ง ์์๋๋ฐ ๋ฉ์ธ ํ์ด์ง์์ ์ด๋ฌํ ๋ฒ๊ทธ๋ฅผ ์ฐพ์ ํด๊ฒฐํ ์ ๋ ์ข์๋ค๊ณ ์๊ฐํ๋ค.
ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ๋ ์ฒ์์๋ ๊ฐ๊ธฐ ๋ฐ๋ก ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ๋ ค ํ๋๋ฐ ๋ฒํผ ํ ๊ธ์ ํตํด ํ์๊ฐ์ ๋๋ ๋ก๊ทธ์ธ ํ์ด์ง๋ฅผ ๋ํ๋๊ฒ ํ๋ค.
์ฒ์ ํผ๊ทธ๋ง ๋ ์ด์์์ด ์ ๋งคํ์ด์ ๋์์ธ์ด ๊ฝค ๊ด์ฐฎ๊ฒ ๋์๋ค๋ ํ๊ฐ๋ฅผ ๋ค์๋ค.
์ฌ๊ธฐ์์ ํ์๊ฐ์ ๊ธฐ๋ฅ, ๊ทธ๋ฆฌ๊ณ ์ผ๋ฐ ๋ก๊ทธ์ธ๊ณผ ์์ ๋ก๊ทธ์ธ ๋ง์ง๋ง์ผ๋ก ๊ฒ์คํธ ๋ก๊ทธ์ธ๊น์ง ๋ฐฑ์๋ API ๋ฅผ ๋ฐ์ ๊ตฌํ์ ์๋ฃํ๋ค.
์ด ๋๋ถํฐ ํ์ ์ธ์ฆ ๊ด๋ จ API ์์ฒญ ๋ก์ง์ Redux ๋ฅผ ์ฌ์ฉํด์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋๋ก ํ๋ ์๋๋ฅผ ํ๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก ์ ๋์๋ค.
axios ์์ฒญ์ ๋งค๋ฒ ์ฌ์ฉํ๋๊น ์ด๊ฒ์ ๋ชจ๋ํ ํด์ ์ฐ๋ ์๋๋ ํ๋ค. ํ์ง๋ง ๋์ค์ ์ฝ๋๊ฐ ๋ณต์กํด ์ง๋ฉด์ ๋ชจ๋ํ๋ ์์ฒญ ๋์ axios ๋ฅผ ์ง์ ์ฐ๋
๋ฐฉ์๋ ๋์์ ์ทจํ๊ธฐ๋ ํ๋ค.
์ด ๋ถ๋ถ์์ ํ์ ๋ก๊ทธ์ธ ์ ๋ฐฑ์๋๋ก๋ถํฐ ๋ฐ๋ ํ ํฐ์ ์ด๋ป๊ฒ ๊ด๋ฆฌํ๋์ง, ์นด์นด์ค ๋ก๊ทธ์ธ ์ฐ๊ฒฐ ์์์ ์ ๊ทผ ๋ฐฉ์, Redirect URI ์์ ๋๊ฒจ๋ฐ์ URL ์ ์๋ ๊ฐ์ ์ด๋ป๊ฒ ๋ฐฑ์๋๋ก ์ ๋ฌํด ์ฃผ๋ ์ง์ ๋ํ ๊ณผ์ ์ ๋ฐฐ์ฐ๊ณ ์๊ฒ ๋์๋ค.
๋ฌด์๋ณด๋ค ์ํต์ด ์ ๋ง ์ค์ํ๊ณ ๋จธ๋ฆฌ๊ฐ ๋ง์ ์๋ก ํด๊ฒฐ์ด ์์ํด ์ง๋ค ๋ผ๋ ๊ฒ์ ๋๊ผ๋ค!
๋ชจ๋ฅด๋ฉด ํผ์ ๋๋ ์๋ ์๊ฐ๋ ์ค์ํ์ง๋ง, ์ด๋ค ๋ถ๋ถ์ ์ด๋ป๊ฒ ๋งํ๊ณ ์ด๋ ค์์ ๋๋ผ๋์ง ์ ๊ณต์ ํ๋ ๊ฒ๋ ๊ฐ๋ฐ์์ ๋๋ชฉ์ด๋ผ ์๊ฐํ๋ค.
์ด ๋ถ๋ถ์ ๊ตฌ์ฑํ๋ฉด์ ์ ์ผ ๊ธฐ์ต์ ๋จ๋ ์ ์, multer ๋ฐฑ์๋ ์์ฒญ์ ํ๊ธฐ ์ํด์๋ ํ๋ก ํธ์๋์์ formData ๋ผ๋ ๋ฐฉ์์ผ๋ก ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ ์ค์ผ ํ๋ค๋ ์ ๊ณผ
๋น ์ธ๊ฐ๋ ์ฌ์ฉ์๊ฐ ๋ง์ดํ์ด์ง๋ก ์ ๊ทผ (url ์ง์ ์ ๋ ฅ์ ํตํด) ํ์ ๋ ๋ชจ๋ฌ ์ฐฝ์ ๋์์ ํ์๊ฐ์ ์ ์ ๋ํ๊ฒ ๋ง๋ค์๋ ์ ์ด๋ค.
์ฒ์์๋ ๋น์ธ๊ฐ ์ฌ์ฉ์ ์ ๊ทผ ์ ๋ฐ๋ก ํ์ผ๋ก ํ๊ธฐ๊ฒ๋ง ํ๋ ค๊ณ ํ์๋๋ฐ ๊ทธ ๋ถ๋ถ์ ๋ญ๊ฐ ์ฌ์ฉ์๋ฅผ ๋ฐฐ๋ คํ ๋๋์ด ์๋๋ผ๊ณ ์๊ฐํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์ด ํ์ด์ง์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์์ ํ ์ ์๋๋ก ๋ก์ง์ ์์ฑํ์๋ค.
multer ๊ตฌํ์ ์ํ ํ๋ก ํธ์๋ ์์์ ์ฒ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ํ ๊น ๊ฒ์ํด ๋ณด๋ค formData ๋ก ๋๊ฒจ์ค์ผ ํ๋ค๋ ๊ฒ์ ์๊ฒ ๋์๊ณ ์ด ๋ ๋ฐฑ์๋ ์ธก์์ ๋๊ฒจ์ค์ผ ํ๋ ์ฝ๋ ๋ํ ์์ ์ด ํ์ํ๋ค๋ ๊ฒ์ ์๊ฒ ๋์ด ํ์๋ค๊ณผ ๊ณต์ ํ์ฌ ํด๊ฒฐํ๋ค๋ ๊ฒ๋ ๋ฟ๋ฏํ๋ค.
ํํด ์ฒ๋ฆฌ ์ ํ ๋ฒ ๋ ๋ฌผ์ด๋ด์ ํ์คํ ํํด ์ฌ๋ถ๋ฅผ ์ ํ๋ ๋ชจ๋ฌ์ฐฝ๋ ๋ง๋ค์ด ๋ณด์๊ณ , ๋ง์ดํ์ด์ง ์๋์ ์ค์ผ์ค๋ฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋๋ flex ๋ฅผ ํตํด ๊ตฌํํด ๋ณผ ์ ์๋ ์ข์ ๊ธฐํ๊ฐ ๋์๋ค.
3ํธ์โฆ ๋ด์ผ ์จ๋ณด์!!